// 这个是服务端

// 服务端干什么 ??

// 1. 字符串当英文 , 翻译
// 2.

#include <memory>
#include "UdpServer.hpp"
#include "Common.hpp"
#include "Dict.hpp"
#include "InetAddr.hpp"

// 使用方式
void Usage()
{
    std::cerr << " Usage :  ./server port " << std::endl;
}

// ./server port
int main(int argc, char *argv[])
{
    if (argc != 2)
    {
        Usage();
        exit(Usage_error);
    }
    //获取端口号 , 转成 uint16_t 的整数  
    uint16_t port = std::stoi(argv[1]);

    //服务端 -- 提供翻译服务 

    //定义字典对象
    Dict dict;
    //1. 加载字典
    dict.LoadDict();


    // 2. 由服务器通信给客户端 

    //构建服务器对象 , 我要把翻译任务传进去 
    //用 lambda 表达式 , 可以把一个类和另一个类关联起来
    //这样服务器类可以构造时访问字典类处理任务
 
     std::unique_ptr<UdpServer> usvr = std::make_unique<UdpServer>(port, 
        [&dict](const std::string &word, InteAddr& addr)->std::string{
        return dict.Translate(word, addr);
    });


    usvr->Init();
    usvr->Start();


    return 0;
}